# -*- coding: utf-8 -*-
"""
    xfree.utils.email
    ~~~~~~~~~~~~~~~~~~~~~
    文件描述：这个模块添加了发送电子邮件的功能。
    作者：xfree
    邮箱：cy_83k@qq.com
"""

import logging

from flask import render_template
from flask_babelplus import lazy_gettext as _
from flask_mail import Message

from xfree.extensions import celery, mail

# 获取日志记录器
logger = logging.getLogger(__name__)


@celery.task
def send_reset_token(token, username, email):
    """
    向用户的电子邮箱发送重置令牌。

    :param token: 要发送给用户的令牌
    :param username: 接收邮件的用户名
    :param email: 用户的电子邮箱地址
    """
    send_email(
        subject=_("Password Recovery Confirmation"),
        recipients=[email],
        text_body=render_template(
            "email/reset_password.txt", username=username, token=token
        ),
        html_body=render_template(
            "email/reset_password.html", username=username, token=token
        ),
    )


@celery.task
def send_activation_token(token, username, email):
    """
    向用户的电子邮箱发送激活令牌。

    :param token: 要发送给用户的令牌
    :param username: 接收邮件的用户名
    :param email: 用户的电子邮箱地址
    """
    send_email(
        subject=_("Account Activation"),
        recipients=[email],
        text_body=render_template(
            "email/activate_account.txt", username=username, token=token
        ),
        html_body=render_template(
            "email/activate_account.html", username=username, token=token
        ),
    )


@celery.task
def send_async_email(*args, **kwargs):
    send_email(*args, **kwargs)


def send_email(subject, recipients, text_body, html_body, sender=None):
    """
    向给定的收件人发送电子邮件。

    :param subject: 电子邮件的主题。
    :param recipients: 收件人列表。
    :param text_body: 电子邮件的纯文本正文。
    :param html_body: 电子邮件的HTML正文。
    :param sender: 由名称和地址组成的二元组。如果没有提供发送者，将使用配置中的"MAIL_DEFAULT_SENDER"。
    """
    msg = Message(subject, recipients=recipients, sender=sender)
    msg.body = text_body
    msg.html = html_body
    mail.send(msg)